Amazon EventBridge のルールが稀に失敗する原因について教えてください
困っていた内容
【Amazon EventBridge(rules)】 → 【AWS Systems Manager(Automation runbook) : AWS-StopEC2Instance】 → 【StopEC2Instance】 のように、EventBridge ルールを構成しています。
上記の構成にて毎日定時に実行するようにルールを設定しましたが、稀に実行されない時があります。
稀に実行されない原因や、こちらの事象についてどのように対応すれば良いか教えてください。
どう対応すればいいの?
再試行ポリシーの設定をご検討ください。
Amazon EventBridge では、ルールで指定されたターゲットにイベントが正常に配信されないことが仕様として AWS 公式ドキュメントに記載されております。
ルールで指定されたターゲットにイベントが正常に配信されないことがあります。例えば、ターゲットリソースが使用できない場合や、EventBridge にターゲットリソースへのアクセス許可がない場合、またはネットワーク状態が原因で発生します。再試行可能なエラーのためにイベントがターゲットに正常に配信されない場合、EventBridge はイベントの送信を再試行します。ターゲットの再試行ポリシー設定で、再試行する時間の長さと再試行回数を設定します。デフォルトでは、EventBridge はエクスポネンシャルバックオフとジッタ、つまりランダム化された遅延を使用して、イベントの送信を 24 時間、最大 185 回再試行します。
ターゲットリソースが使用できない場合、EventBridge にターゲットリソースへのアクセス許可がない場合、またはネットワークの一時的な問題等の状況によりターゲットにイベントが正常に配信されないことがあるため、前述の再試行ポリシーの設定をご検討ください。
補足
「稀に発生」であることを確認するために、当該事象を観測された時間帯以外の日時において、実行された記録(証跡)をお調べいただくことも必要に応じてご検討ください。
例えば、冒頭で示している EventBridge ルールの構成の場合、当該事象を観測された時間帯以外の日時における下記 CloudWatch メトリクスや CloudTrail のイベント(API)等の記録の有無や内容について調査することで、当該事象の記録と比較して、本当に稀に発生しているかの切り分けが可能と考えられます。
下記メトリクスや API については本ブログ末尾の参考資料より適宜ご参照ください。
- CloudWatch メトリクス: Invocations、FailedInvocations
-
CloudTrail (右記 API の証跡を確認): StartAutomationExecution、StopInstances
参考資料
-
Amazon EventBridge のモニタリング - Amazon EventBridge
Invocations
イベントに反応してルールのターゲットが呼び出された回数。これには、成功した呼び出しと失敗した呼び出しが含まれますが、スロットルされた試行と再実行された試行は完全に失敗するまで含められません。DeadLetterInvocations は含まれません
FailedInvocations
完全に失敗した呼び出しの回数。これには、再試行された呼び出しや、再試行の後に成功した呼び出しは含まれません。また、DeadLetterInvocations にカウントされる失敗した呼び出しもカウントされません。
- StartAutomationExecution - AWS Systems Manager
Initiates execution of an Automation runbook.
- AWS-StopEC2Instance - AWS Systems Manager Automation runbook reference
Description
Stops one or more Amazon Elastic Compute Cloud (Amazon EC2) instances.
- StopInstances - Amazon Elastic Compute Cloud
Stops an Amazon EBS-backed instance.